package variable

import (
	//_代表不引用这个包，但是也没删掉，可以不报错
	"fmt"
	"strconv"
	_ "unsafe"
)

//将基本数据类型转为string类型

//推荐！使用fmt.sprintf()方法
func printInfo() {
	var num int = 11
	var price float32 = 7.6
	var flag bool = true
	var mychar byte = 'a'
	var str string
	//下面的%d,%f,%t,%c也可以换成%v原值输出
	str = fmt.Sprintf("%d", num)
	fmt.Println(str)
	str = fmt.Sprintf("%f", price)
	fmt.Println(str)
	str = fmt.Sprintf("%t", flag)
	fmt.Println(str)
	str = fmt.Sprintf("%c", mychar)
	//%q 可以加上双引号，好看
	fmt.Printf("%q", str)
}

//不太推荐。使用strconv包的方法
func printByStrconv() {
	var num int = 11
	var price float64 = 7.6
	var flag bool = true
	//var mychar byte = 'a'
	var str string

	//输入int64格式，转为10进制数字
	str = strconv.FormatInt(int64(num), 10)
	fmt.Println(str)
	str = strconv.Itoa(num)
	fmt.Println(str)
	//输入float64；'f'指普通十进制小数，这里可用'e'科学技术法等其他字符；精度为10，即保留10位小数；64表达输入是64位的
	str = strconv.FormatFloat(price, 'f', 10, 64)
	fmt.Println(str)
	//转bool类型
	str = strconv.FormatBool(flag)
	fmt.Println(str)
}

//string类型转换为基本数据类型
func str2var() {
	var flag string = "true"
	var b bool
	//返回值 bool, error 报错信息不需要
	b, _ = strconv.ParseBool(flag)
	fmt.Println(b)
	var numstr string = "12345"
	var num int64
	//10进制，64位。指定你所转换的数值能不能满足bitSize范围大小。如果不满足你指定的bitSize范围（如溢出等），那么err会得到错误信息
	num, _ = strconv.ParseInt(numstr, 10, 64)
	fmt.Println(num)
	//不能转换的别硬转,给你默认0
	hello := "hello"
	num, _ = strconv.ParseInt(hello, 10, 64)
	fmt.Println(num)

}
